Java software is often built using a Maven build tool. Maven is an example build automation tool that can also handle code in other languages besides Java. Maven repositories operate on a principle of uniqueness such that a certain URL always leads to the same software artifact. According to the Maven philosophy, testing is an integral part of the build process, and is tightly bound to the build process. So separation of the testing part for reuse with Java binary files created during the build process is usually difficult.
One workaround for this problem is to manually identify all dependencies needed by a particular test suite, manually locate their respective binary files, manually convert the binary files to a compatible file and directory structure, and set Maven to use the files. With a large or even modest project with dozens of dependencies, this manual approach has significant risk of introducing errors.
Large software packages are often distributed in a form of self-contained set of binary executable files and supporting files (e.g., configuration files, documentation files), collectively referred to as a “distribution”. Another alternative is to pre-create a static local Maven repository based on metadata available from the distribution's binary files. However this approach also typically has several major disadvantages. First, these files, when not built using Maven build tool, usually do not contain proper metadata. Especially the version is often different from the official artifacts built using Maven. For example, the versions may have some string appended, or may be different, or can even be missing. Even if the versions are correct, this approach usually lacks flexibility, particularly with newer or different versions. The version stated in the metadata may not match the one needed by the test suite, and thus again, it would be often necessary to manually reconfigure the test suite's dependencies.
Another disadvantage of this approach is the files should typically be copied and moved, which can be tedious if performed manually and can be time consuming even if performed in an automated way.